]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
loginDialog: Defer loading user list until needed
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 7 Mar 2014 15:04:01 +0000 (16:04 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 7 Mar 2014 23:29:11 +0000 (00:29 +0100)
Loading the user list can be expensive, for instance when there is
a large number of users and/or their avatars have to be fetched over
the network. In case the user list is disabled anyway, there is no
point in doing that work just to hide it, so stop doing that.

https://bugzilla.gnome.org/show_bug.cgi?id=725905

js/gdm/loginDialog.js

index 080237cfb0c00b1ea047d1998afe425515aaa7fc..6e3cb97e3241162a9bbd7e5959c3413261a6f615 100644 (file)
@@ -469,6 +469,17 @@ const LoginDialog = new Lang.Class({
         this._sessionMenuButton.actor.show();
         this._authPrompt.addActorToDefaultButtonWell(this._sessionMenuButton.actor);
 
+        this._disableUserList = undefined;
+        this._userListLoaded = false;
+
+        // If the user list is enabled, it should take key focus; make sure the
+        // screen shield is initialized first to prevent it from stealing the
+        // focus later
+        Main.layoutManager.connect('startup-complete',
+                                   Lang.bind(this, this._updateDisableUserList));
+    },
+
+    _ensureUserListLoaded: function() {
         if (!this._userManager.is_loaded)
             this._userManagerLoadedId = this._userManager.connect('notify::is-loaded',
                                                                   Lang.bind(this, function() {
@@ -480,8 +491,7 @@ const LoginDialog = new Lang.Class({
                                                                   }));
         else
             GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, this._loadUserList));
-
-   },
+    },
 
     _updateDisableUserList: function() {
         let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
@@ -801,6 +811,7 @@ const LoginDialog = new Lang.Class({
     },
 
     _showUserList: function() {
+        this._ensureUserListLoaded();
         this._authPrompt.hide();
         this._sessionMenuButton.close();
         this._setUserListExpanded(true);
@@ -844,14 +855,17 @@ const LoginDialog = new Lang.Class({
     },
 
     _loadUserList: function() {
+        if (this._userListLoaded)
+            return GLib.SOURCE_REMOVE;
+
+        this._userListLoaded = true;
+
         let users = this._userManager.list_users();
 
         for (let i = 0; i < users.length; i++) {
             this._userList.addUser(users[i]);
         }
 
-        this._updateDisableUserList();
-
         this._userManager.connect('user-added',
                                   Lang.bind(this, function(userManager, user) {
                                       this._userList.addUser(user);